package functionality;

import java.util.List;

import entity.DALException;
import entity.IOperatoerDTO;

public interface IOperatoerDAO {
	/**
	 * Returnerer operatør-objektet for det specifikke operatør ID der angives
	 * @param oprId Operatør ID på den operatør man ønsker
	 * @return Operatøren
	 * @throws DALException
	 */
	IOperatoerDTO getOperatoer(int oprId) throws DALException;
	
	/**
	 * Returnerer liste af aktive operatører
	 * @return Liste af aktive operatører
	 * @throws DALException
	 */
	List<IOperatoerDTO> getOperatoerList() throws DALException;
	
	/**
	 * Returnerer liste af slettede (inaktive) operatører.
	 * @return liste af inaktive operatøerer
	 */
	List<IOperatoerDTO> getDelOpr();
	
	/**
	 * Opretter en ny operatør i systemet.
	 * @param forName Fornavn
	 * @param lastName Efternavn
	 * @param cpr CPR-nummer
	 * @return Operatør ID + Password
	 * @throws DALException
	 */
	String createOperatoer(String forName, String lastName, String cpr) throws DALException;
	
	/**
	 * Opdaterer en operatørs navn og initialer i systemet
	 * @param oprID Operatør ID
	 * @param forName Nyt fornavn
	 * @param lastName Nyt efternavn
	 * @return Nye initialer
	 * @throws DALException
	 */
	String updateOperatoer(int oprID, String forName, String lastName) throws DALException;
	
	/**
	 * Genererer et random password på 6-11 tegn der indeholder mindst 3 af 4 forskellige typer (små bogstaver,
	 * store bogstaver, tal fra 0-9 og specialtegn)
	 * @return Password
	 */
	String passwordGen();
	
	/**
	 * Ændrer operatørs password til nyt, hvis det overholder DTU's password krav.
	 * @param ID
	 * @param password
	 * @param newPassword
	 * @return true / false
	 */
	boolean passwordChange(int ID, String password, String newPassword);
	
	/**
	 * Laver initialer ud fra operatørs for- og efternavn.
	 * @param fornavn
	 * @param efternavn
	 * @return initialer 
	 */
	String createInitial(String fornavn, String efternavn);
	
	/**
	 * Tjekker om operatørs selv opfundne password overholder DTU's password krav.
	 * @param newPassword
	 * @return true / false
	 */
	boolean checkPassword(String newPassword);
	
	/**
	 * Nulstiller en operatørs password til et random password
	 * @param oprID Operetør ID 
	 * @return Random password
	 */
	String resetPassword(int oprID);
	
	/**
	 * Sletter operatør.
	 * @param oprID
	 * @return false / true
	 */
	boolean deleteOperatoer(int oprID);
}